package cryptokey

import (
	"encoding/base64"
	"fmt"
	"strings"
	"uni-core/globals"
)

// EncodeBase64 将字符串进行 Base64 编码
// 编码后会在编码结果前添加指定的前缀
func EncodeBase64(text string) string {
	// 使用标准库进行 Base64 编码
	encoded := base64.StdEncoding.EncodeToString([]byte(text))

	// 在编码结果前添加前缀
	return fmt.Sprintf("%s%s", globals.ExportDataPrefix, encoded)
}

// DecodeBase64 将 Base64 编码的字符串解码为原始字符串
// 如果编码字符串以指定的前缀开头, 则会去除前缀
func DecodeBase64(encoded string) (string, error) {
	// 检查编码字符串是否以指定的前缀开头，如果有则去除前缀
	if strings.HasPrefix(encoded, globals.ExportDataPrefix) {
		encoded = strings.TrimPrefix(encoded, globals.ExportDataPrefix)
	}

	// 使用标准库进行 Base64 解码
	data, err := base64.StdEncoding.DecodeString(encoded)
	if err != nil {
		return "", fmt.Errorf("解码 Base64 失败: %v", err)
	}
	return string(data), nil
}
